/*
给出班里某门课程的成绩单，请你按成绩从高到低对成绩单排序输出，如果有相同分数则名字字典序小的在前。

Input
第一行为n (0 < n < 20)，表示班里的学生数目；
接下来的n行，每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20，成绩为一个不大于100的非负整数。

Output
把成绩单按分数从高到低的顺序进行排序并输出，每行包含名字和分数两项，之间有一个空格。

Sample Input
4
Kitty 80
Hanmeimei 90
Joey 92
Tim 28

Sample Output
Joey 92
Hanmeimei 90
Kitty 80
Tim 28
*/
#include <bits/stdc++.h>
using namespace std;
typedef struct student
{
    string name; // 名字
    int x;       // 成绩
} Stu;

bool cmp(Stu a, Stu b)
{
    if (a.x == b.x)
    {
        return a.name < b.name;
    }
    else
    {
        return a.x >= b.x; // 按成绩的从大到小排序
    }
}

int main()
{
    int n, i;
    cin >> n;
    Stu s[n + 2];
    for (i = 1; i <= n; i++)
    {
        cin >> s[i].name >> s[i].x;
    }
    sort(s + 1, s + n + 1, cmp);
    for (i = 1; i <= n; i++)
    {
        cout << s[i].name << " " << s[i].x << endl;
    }
    return 0;
}